
//3113.边界元素是最大值的子数组数目
class Solution {
public:
    long long numberOfSubarrays(vector<int>& nums) {
        int n=nums.size();
        stack<pair<int,int>> st;
        long long ret=n;            //向将子数组长度为1的加入到答案中

        for(int i=0;i<n;i++)
        {
            while(!st.empty()&&st.top().first<nums[i]) st.pop();  //如果栈顶元素小,出栈

            if(!st.empty()&&st.top().first==nums[i])   //栈顶与当前元素相等,是满足条件的子数组
            {
                ret+=st.top().second;
                st.push({nums[i],st.top().second+1});
            }  
            else st.push({nums[i],1});
        }
        return ret;
    }
};